﻿using System;
using System.IO;
using System.Xml;
using System.Collections.Generic;
using ClaseElemento;

namespace Borra{
    class DeleteOldCopies
    {
        public StreamWriter log;
        public void ComienzaBorrado()
        {
            XmlDocument conf = new XmlDocument();
            conf.Load("conf.xml");
            XmlNodeList datos = conf.GetElementsByTagName("directorios");
            XmlNodeList directorios = ((XmlElement)datos[0]).GetElementsByTagName("directorio");
            directorios[0].RemoveAll();
            
            log = new StreamWriter("DeOCop.log");
            log.WriteLine("Fecha de borrado: " + DateTime.Now.ToString("dd-MM-yyy hh:mm:ss"));
            log.WriteLine("-----------------------------------------------------------\r\n\r\n");
            
            for (int i = 1; i != directorios.Count; ++i)
            {
                log.WriteLine("Directorio padre: {0} \r\n", ((XmlElement)directorios[i]).GetAttribute("ruta"));
                ProcesaDirectorio(((XmlElement)directorios[i]).GetAttribute("ruta"), ((XmlElement)directorios[i]).GetElementsByTagName("elemento"));
                log.WriteLine("\r\n\r\n\r\n");
            }
            log.Close();
        }
        //Función para el borrado de un directorio
        public void ProcesaDirectorio(string dirpadre, XmlNodeList nombres)//, Int32 ncopias)
        {
            DirectoryInfo dir = new DirectoryInfo(dirpadre);
            List<Elemento> elementos = new List<Elemento>();
            foreach (XmlElement nom in nombres)
            {
                Elemento elem = new Elemento(nom.GetAttribute("nombre"), Convert.ToInt32(nom.GetAttribute("numcopias")), Convert.ToChar(nom.GetAttribute("tipo")), Convert.ToChar(nom.GetAttribute("sql")), dirpadre);
                if(elem.Tipo == 'd')
                {
                    DirectoryInfo[] directorios = dir.GetDirectories();
                    foreach (DirectoryInfo d in directorios)
                        elem.Add(d.Name);
                }
                else if (elem.Tipo == 'f')
                {
                    FileInfo[] ficheros = dir.GetFiles();
                    foreach (FileInfo f in ficheros)
                        elem.Add(f.Name);
                }
                
                elementos.Add(elem);
            }
            foreach (Elemento el in elementos)
            {
                el.SalvaNuevos();
                el.BorraAntiguos(log);
            }
            
        }
    }
}